/*
 * Copyright 2010,2011,2012 Michael Nitsche
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

package de.mnit.schnipsel.swt;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.stream.XMLStreamException;

import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;

import de.mnit.basis.daten.MN;
import de.mnit.basis.daten.struktur.S_Folge;
import de.mnit.basis.daten.struktur.liste.Liste;
import de.mnit.basis.daten.struktur.liste.S_Liste;
import de.mnit.basis.daten.struktur.tabelle.S_Tabelle;
import de.mnit.basis.fehler.system.F_Sys_Datei;
import de.mnit.basis.swt.dialog.SWT_Dialog;
import de.mnit.basis.swt.dialog.SWT_Fehler;
import de.mnit.basis.swt.element.feld.menue.SWT_MenueFeld;
import de.mnit.basis.swt.element.menue.SWT_MenueDropDown;
import de.mnit.basis.swt.element.menue.SWT_MenueLeiste;
import de.mnit.basis.swt.grafik.icon.direkt.ICON;
import de.mnit.basis.sys.datei.DSDatei;
import de.mnit.basis.sys.datei.S_Datei;
import de.mnit.basis.sys.sprache.S;
import de.mnit.schnipsel.db.DBManager;
import de.mnit.schnipsel.div.XMLExport;
import de.mnit.schnipsel.div.XMLImport;
import de.mnit.schnipsel.zentral.SC_Events;
import de.mnit.schnipsel.zentral.SC_GuiObs;
import de.mnit.schnipsel.zentral.SC_Info;

/**
 * @author Michael Nitsche
 * 10.07.2010	Erstellt
 */
public class HauptMenue {

	private static final S s=new S(HauptMenue.class);
	private SWT_MenueDropDown mBaum, mBearbeiten, mChronik, mExtras;

	public void init() {
		SWT_MenueLeiste menu=SC_GuiObs.i().hauptfenster().nMenue_Leiste();

		SWT_MenueDropDown datei=menu.nMenueDropDown(s.t("Datei"));
		datei.nMenueFeld(s.t("Einstellungen"), null, ICON._16.WERKZEUG).eAuswahl(new Listener() {
			public void handleEvent(Event e) {
				SC_Events.konfig();
			}
		});
//		datei.nMenueTrenner();
//		final SWT_MenueFeldAuswahl deutsch=datei.nMenueFeldAuswahl("Deutsch");
//		deutsch.eAuswahl(new Listener() {
//			public void handleEvent(Event e) {
//				if(!deutsch.gAusgewaehlt())
//					return;
//				Ausgabe.debugDetail();
//				KonfigLokal.i().anwSprache(SC_SPRACHE.DEUTSCH);
//				SWT_Dialog.hinweis(s.t("Diese Änderung wird erst beim nächsten Start aktiv!"));
//			}
//		});
//
//		final SWT_MenueFeldAuswahl englisch=datei.nMenueFeldAuswahl("English");
//		englisch.eAuswahl(new Listener() {
//			public void handleEvent(Event e) {
//				if(!englisch.gAusgewaehlt())
//					return;
//				Ausgabe.debugDetail();
//				KonfigLokal.i().anwSprache(SC_SPRACHE.ENGLISCH);
//				SWT_Dialog.hinweis(s.t("Diese Änderung wird erst beim nächsten Start aktiv!"));
//			}
//		});
//		int sprache=KonfigLokal.i().anwSprache();
//		deutsch.sAusgewaehlt(sprache==SC_SPRACHE.DEUTSCH.ordinal());
//		englisch.sAusgewaehlt(sprache==SC_SPRACHE.ENGLISCH.ordinal());


		datei.nMenueTrenner();
		//.eKlick_Schliessen(); Beendet ohne zu speichern!
		datei.nMenueFeld(s.t("Beenden"), "Strg+Q", ICON._16.AKTION_ABBRUCH).eAuswahl(new Listener() {
			public void handleEvent(Event e) {
				SC_Events.beenden(true);
			}
		});

		SWT_MenueDropDown baum=menu.nMenueDropDown(s.t("Pfad"));
		baum.nMenueFeld(s.t("Neuer Ordner"), "F5", ICON._16.AKTION_PLUS).eAuswahl(new Listener() {
			public void handleEvent(Event e) {
				SC_GuiObs.i().baum().plus();
			}
		});
		baum.nMenueFeld(s.t("Ordner entfernen"), "F6", ICON._16.AKTION_MINUS).eAuswahl(new Listener() {
			public void handleEvent(Event e) {
				SC_GuiObs.i().baum().minus();
			}
		});

		SWT_MenueDropDown bearbeiten=menu.nMenueDropDown(s.t("Schnipsel"));
		bearbeiten.nMenueFeld(s.t("Neu"), "Strg++", ICON._16.AKTION_PLUS).eAuswahl(new Listener() {
			public void handleEvent(Event e) {
				SC_Events.schnipselPlus();
			}
		});
		bearbeiten.nMenueFeld(s.t("Löschen"), "Strg+-", ICON._16.AKTION_MINUS).eAuswahl(new Listener() {
			public void handleEvent(Event e) {
				SC_Events.schnipselMinus();
			}
		});
		bearbeiten.nMenueTrenner();
		bearbeiten.nMenueFeld(s.t("Speichern"), "Strg+S", ICON._16.AKTION_SPEICHERN).eAuswahl(new Listener() {
			public void handleEvent(Event e) {
				SC_Events.schnipselSpeichern();
			}
		});
		bearbeiten.nMenueFeld(s.t("Drucken"), "Strg+P", ICON.gib(16, "deb_tango", "printer.png")).eAuswahl(new Listener() {
			public void handleEvent(Event e) {
				SC_Events.schnipselDrucken();
			}
		});
		bearbeiten.nMenueTrenner();
		//Kein Hotkey, sonst wird immer alles von Text und von Liste ausgewählt!!!
		bearbeiten.nMenueFeld(s.t("Alle auswählen"), null, ICON._16.GRUPPE).eAuswahl(new Listener() { /*.sHotKey("STRG+A")*/
			public void handleEvent(Event e) {
				SC_GuiObs.i().liste().sAuswahlAlles();
			}
		});
		bearbeiten.nMenueFeld(s.t("Papierkorb leeren"), null, ICON._16.WERKZEUG).eAuswahl(new Listener() {
			public void handleEvent(Event e) {
				SC_Events.papierkorbLeeren();
			}
		});

		final SWT_MenueDropDown chronik=menu.nMenueDropDown(s.t("Chronik"));
		final S_Liste<SWT_MenueFeld> felder=Liste.neu();
		chronik.eZeigen(new Listener() {
			public void handleEvent(Event e) {
				// Aufräumen
				for(SWT_MenueFeld feld : felder)
					feld.freigeben();
				felder.leeren();

				//Neu
				S_Tabelle<String> dbc=DBManager.schnipsel().gChronik(10);
				for(S_Folge<String> titel_id : dbc) {
					final int id=Integer.parseInt(titel_id.gib(2));
					final SWT_MenueFeld feld=chronik.nMenueFeld(titel_id.gib(1));
					felder.plus(feld);
					feld.sBild(ICON._16.OBJ_ZEIT);
					feld.eAuswahl(new Listener() {
						public void handleEvent(Event e) {
							SC_Events.zeigArtikel(id, true);
						}
					});
				}
			}
		});
//		chronik.eAusblenden(new Listener() { //Problem: Wird vor Klickevent ausgelöst!

		SWT_MenueDropDown extras=menu.nMenueDropDown(s.t("Extras"));
		extras.nMenueFeld(s.t("HTML-Export"), null, ICON._16.OBJ_ERDE).eAuswahl(new Listener() {
			public void handleEvent(Event e) {
				SC_Events.htmlExport(null);
			}
		});
		extras.nMenueFeld(s.t("Sichern"), null, ICON._16.PFEIL_RECHTS).eAuswahl(new Listener() {
			public void handleEvent(Event e) {
				try {
					String[] datei1=SWT_Dialog.frage_DateiSpeichern(s.t("XML-Export"), "*.xml");
					if(datei1==null || datei1.length==0)
						return;
					S_Datei datei=DSDatei.neu(datei1[0]);
					if(datei.existiert()) {
						Boolean b=SWT_Dialog.frage_JaNein("\""+datei.gNameKomplett()+"\"\nwirklich überschreiben?");
						if(!MN.istTrue(b))
							return;
					}
					datei.sEndung("xml");
//					S_Datei datei=DSLokal.temp().dF("xmltest", "xml");
					XMLExport ex=new XMLExport();
					ex.generieren(datei.schreiben());
				}
				catch(F_Sys_Datei f) {
					SWT_Fehler.zeig(f, false);
				}
			}
		});
		extras.nMenueFeld(s.t("Wiederherstellen"), null, ICON._16.PFEIL_LINKS).eAuswahl(new Listener() {
			public void handleEvent(Event e) {
				try {
					String[] dateien=SWT_Dialog.frage_DateiOeffnen(s.t("XML-Import"), false, "*.xml");
					if(dateien==null || dateien.length!=1)
						return;

					Boolean b=SWT_Dialog.frage_JaNein(s.t("Dabei werden alle Daten überschrieben! Ok?"));
					if(!MN.istTrue(b))
						return;

					S_Datei datei=DSDatei.neu(dateien[0]);
//					S_Datei datei=DSLokal.temp().dF("xmltest", "xml");
					XMLImport in=new XMLImport();
					in.lies(datei.lesen());
				}
				catch (F_Sys_Datei f) {
					SWT_Fehler.zeig(f, false);
				}
				catch (ParserConfigurationException f) {
					SWT_Fehler.zeig(f, false);
				}
				catch (XMLStreamException f) {
					SWT_Fehler.zeig(f, false);
				}
			}
		});

		SWT_MenueDropDown hilfe=menu.nMenueDropDown("?");
		hilfe.nMenueFeld(s.t("Info"), null, ICON._16.OBJ_NOTIZBLOCK).eAuswahl(new Listener() {
			public void handleEvent(Event e) {
				SC_Info.infoSchnipsel(SC_GuiObs.i().hauptfenster());
			}
		});

		hilfe.nMenueFeld(s.t("Ausgleich"), null, ICON._16.OBJ_NOTIZBLOCK).eAuswahl(new Listener() {
			public void handleEvent(Event e) {
				SC_Info.infoAusgleich(SC_GuiObs.i().hauptfenster());
			}
		});

		this.mBaum=baum;
		this.mBearbeiten=bearbeiten;
		this.mChronik=chronik;
		this.mExtras=extras;
	}

	public void sAktiv(boolean b) {
		this.mBaum.swt().setEnabled(b);
		this.mBearbeiten.swt().setEnabled(b);
		this.mChronik.swt().setEnabled(b);
		this.mExtras.swt().setEnabled(b);
	}

}
